package com.czk.pipe;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;

/**
 * java NIO管道是2个线程之间的单向数据源连接
 * pipe有一个sink通道和一个source通道
 * 数据会被写到sink通道，在source通道读取
 *
 * @Author:ChenZhangKun
 * @Date: 2021/3/17 17:48
 */
public class PipeDemo {
    public static void main(String[] args) throws IOException {
        // 获取管道
        Pipe pipe = Pipe.open();
        // 创建缓冲区
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        // 拿到sink通道
        Pipe.SinkChannel sink = pipe.sink();
        // buffer中写入数据
        buffer.put("陈彰坤".getBytes());
        // 切换状态
        buffer.flip();
        // 写入sink
        sink.write(buffer);

        // resource读取数据
        Pipe.SourceChannel source = pipe.source();
        // 切换缓冲区状态
        buffer.flip();
        // 读数据
        int len = source.read(buffer);
        System.out.println(new String(buffer.array(), 0, len));
        source.close();
        sink.close();
    }
}
